import torch.nn as nn
import torch.nn.functional as F

class LeapGestureClassifier(nn.Module):
    def __init__(self):
        super(LeapGestureClassifier, self).__init__()
        self.model = nn.Sequential(
            # 第一个卷积层，输入通道1，输出通道32，卷积核大小5x5，输出padding为2
            nn.Conv2d(1, 32, kernel_size=5, padding=2),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Dropout(p=0.2),  # 使用标准的 Dropout
            
            # 第二个卷积层，输入通道32，输出通道64，卷积核大小3x3，输出padding为1
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Dropout(p=0.2),  # 使用标准的 Dropout
            
            # 第三个卷积层，输入通道64，输出通道64，卷积核大小3x3，输出padding为1
            nn.Conv2d(64, 64, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            
            # 展平层，将多维输入一维化
            nn.Flatten(),
            
            # 第一个全连接层，输入特征数为64*12*12（需要根据实际情况计算），输出特征数128
            nn.Linear(64*12*12, 128),
            nn.ReLU(),
            
            # 第二个全连接层，输出特征数为6（假设有6个类别）
            nn.Linear(128, 6),
            nn.Softmax(dim=1)  # 注意：在训练时通常不使用softmax，而是在评估时使用
        )

    def forward(self, x):
        return self.model(x)